#include <iostream>

// 饿汉模式：以空间换时间
// class Singleton
// {
// private:
//     static Singleton _eton; // 声明
//     Singleton()
//         : _data(99)
//     {
//         std::cout << "单例对象构造!\n";
//     }
//     Singleton(const Singleton &) = delete;
//     ~Singleton()
//     {
//     }

// private:
//     int _data;

// public:
//     static Singleton &getInstance()
//     {
//         return _eton;
//     }

//     int getData()
//     {
//         return _data;
//     }
// };
// Singleton Singleton::_eton; // 初始化

// 懒汉模式：延时加载的思想- 一个对象在用的时候在进行实例化

class Singleton
{
private:
    Singleton()
        : _data(88)
    {
        std::cout << "单例对象构造!\n";
    }
    Singleton(const Singleton &) = delete;
    ~Singleton()
    {
    }

private:
    int _data;

public:
    static Singleton &getInstance()
    {
        static Singleton _eton; // 线程安全
        return _eton;
    }

    int getData()
    {
        return _data;
    }
};

int main()
{
    std::cout << Singleton::getInstance().getData() << std::endl;
    return 0;
}